﻿/*
 Program analogiczny do	WR-Z-12		(03-IV-113)

 Program perforuje napisy w tzw. kodzie wizualnym:
 znaki kodu dalekopisowego nr 2 wprowadzane z dalekopisu
 tłumaczy na układy rządków na taśmie wychodzącej z perforatora 5-kanałowego tak,
 iż układ dziurek przypomina kształtem litery, cyfry i znaki przestankowe
 o stałej szerokości 6 kwintetów, w układzie poziomym.
 Program pracuje na drugiej ścieżce ferrytowej i należy go startować od adresu 17400.
 Po zatrzymaniu się wystarczy wcisnąć [StartCPU] dla ponownego uruchomienia.
 Może być wywołany jako podprogram od adresu 17401 z adresem napisu w A w skali 21,
 kończącego się znakiem LF. Znak CR daje całkowicie zadziurkowane pole.
 Jeśli nie przełączono, to pierwszy znak jest z pocztu cyfr.

 Program jest zgodny z alfabetem dalekopisu TTY MKD-2 PL2.
*/


;Etyk:	Rozkaz			Komentarz
;=====	===================	================================
	:401 17400:		Adr. pocz. programu

PROGR	:032 czTTY prog1 60	B6 = czTTY;	funkcja czytania znaku

PODPR	:726 00000 podp2 00	Ślad - powrót do progr. głównego
poczt	:000 00000 00000 00	Poczet: 0=cyfry, 32=litery
podp2	:021 temp6   +   60	[temp6] = B6;
	:021 temp5   +   50	[temp5] = B5;
	:021 temp4   +   40	[temp4] = B4;
	:032 czTXT   +   60	B6 = czTXT;
	:402 00000   +   50	B5 = A;		adres napisu
	:002 00000   +   40	B4 = 0;		liczba znaków w A
	:746 funkc   +   00	SkS funkc;
	:012 temp4   +   40	B4 = [temp4];
	:012 temp5   +   50	B5 = [temp5];
	:012 temp6 PODPR 60	B6 = [temp6];	i Return

prog1	:050 kodFS   +   00	A = FS;
	:626 00000   +   00	Wy6 = FS;
	:746 funkc   +   00	SkS funkc;
	:726 00000 PROGR 00	Stop;

funkc	:726 00000 funk2 00	Ślad - powrót do PROGR/PODPR
gdyLS	:001 poczt nZnak 00	[poczt] = 0;
funk2	:021 temp7   +   70	[temp7] = B7;
	:021 temp3   +   30	[temp3] = B3;
gdyFS	:032 00040   +   30	B3 = 32;
	:021 poczt   +   30	[poczt] = B3;
nZnak	:000 00000 00000 61	Skocz do czTTY/czTXT; A = znak...
jZnak	:116 00021   +   00	A >>>= 17;	A = znak w skali 21
kodFS	:670 00037   +   00	A &= 31;
	:046 nZnak   +   00			gdy NU, pominąć	
	:330 00033   +   00	A - FS;
	:046 gdyFS   +   00			gdy FS, przełączyć na cyfry	
	:330 00037   +   00	A - LS;
	:046 gdyLS   +   00			gdy LS, przełączyć na litery
	:330 00002   +   00	A - LF;
	:046 gdyLF   +   00			gdy LF, koniec tekstu
	:412 poczt   +   30	B3 = A + [poczt];
	:050 wzory   +   31	A = [wzory+B3];
	:032 00005   +   30	B3 = 5;		licznik rządków
nRząd	:526 00000   +   00	Wy5;
	:016 00005   +   00	A <<<= 5;
	:546 nRząd nZnak 30	SkLC B3-- nRząd;
gdyLF	:012 temp3   +   30	B3 = [temp3];
	:012 temp7 funkc 70	B7 = [temp7];	i Powrót po śladzie

czTTY	:126 00000   +   00	We1; A = znak z dalekopisu
	:016 00042 jZnak 00	A <<<= 34;	i do jZnak

czTXT	:546   +   slowo 40	SkLC B4--;	czy są jeszcze znaki w B7
	:060 00000   +   70	A = B7;		są
	:016 00005 schow 00	A <<<= 5;	i do schowka
slowo	:050 00000   +   51	A = [B5];	słowo ze znakami tekstu
	:646   +     +   50	SkLC B5++;	wskaźnik na nast. słowo
	:032 00006   +   40	B4 = 6;		licznik znaków w słowie
schow	:402 00000 jZnak 70	B7 = A;		i do jZnak

temp3	:000 00000 00000 00	B3 - roboczy
temp4	:000 00000 00000 00	B4 - licznik znaków w słowie
temp5	:000 00000 00000 00	B5 = adres kolejnego słowa tekstu
temp6	:000 00000 00000 00	B6 = funkcja pobierania znaku
temp7	:000 00000 00000 00	B7 - przechowalnia słowa ze znakami

wzory	:357 17775 14000 00	wzór ●
	:772 15326 02000 00	wzór E
	:532 15326 12000 00	wzór ≡
	:742 11227 14000 00	wzór A
	:000 00000 00000 00	wzór  
	:452 15325 02000 00	wzór S
	:010 17704 00000 00	wzór I
	:370 04101 16000 00	wzór U
	:777 17777 16000 00	wzór ⌂
	:770 14305 14000 00	wzór D
	:762 13326 04000 00	wzór R
	:210 14305 16000 00	wzór J
	:761 01043 16000 00	wzór N
	:762 11224 02000 00	wzór F
	:350 14305 04000 00	wzór C
	:762 01052 02000 00	wzór K
	:020 17604 02000 00	wzór T
	:434 15316 02000 00	wzór Z
	:770 04102 00000 00	wzór L
	:764 01043 16000 00	wzór W
	:762 01023 16000 00	wzór H
	:021 07010 02000 00	wzór Y
	:762 11224 04000 00	wzór P
	:350 14347 14000 00	wzór Q
	:350 14305 14000 00	wzór O
	:772 15325 04000 00	wzór B
	:350 15327 12000 00	wzór G
	:206 03461 00000 00	wzór ▲
	:761 01013 16000 00	wzór M
	:425 01052 02000 00	wzór X
	:066 04060 06000 00	wzór V
	:043 03430 04000 00	wzór ▼
	:357 17775 14000 00	wzór ●
	:430 15325 04000 00	wzór 3
	:532 15326 12000 00	wzór ≡
	:102 01020 10000 00	wzór -
	:000 00000 00000 00	wzór  
	:001 00200 00000 00	wzór '
	:252 15325 04000 00	wzór 8
	:034 11214 02000 00	wzór 7
	:777 17777 16000 00	wzór ⌂
	:242 03421 04000 00	wzór *
	:162 01023 16000 00	wzór 4
	:010 02400 00000 00	wzór ;
	:010 02000 00000 00	wzór ,
	:000 05600 00000 00	wzór !
	:000 02400 00000 00	wzór :
	:000 03504 00000 00	wzór (
	:572 15325 02000 00	wzór 5
	:102 07620 10000 00	wzór +
	:010 13400 00000 00	wzór )
	:454 15326 04000 00	wzór 2
	:772 04502 00000 00	wzór Ł
	:352 15325 00000 00	wzór 6
	:350 15305 14000 00	wzór 0
	:011 07700 00000 00	wzór 1
	:052 15325 14000 00	wzór 9
	:040 15224 04000 00	wzór ?
	:213 15646 10000 00	wzór &
	:206 03461 00000 00	wzór ▲
	:000 04000 00000 00	wzór .
	:404 01010 02000 00	wzór /
	:245 02451 04000 00	wzór =
	:043 03430 04000 00	wzór ▼


/*

 ●●●	●●●●	 ●●●	●●●●	●●●●●	●●●●●	 ●●●●	●   ●	 ●●●	 ●●●●	●   ●	●	●   ●	●   ●	 ●●●	●●●●	 ●●●	●●●●	 ●●●●	●●●●●	●   ●	●   ●	●   ●	●   ●	●   ●	●●●●●
●   ●	●   ●	●   ●	●   ●	●	●	●	●   ●	  ●	    ●	●  ●	●	●● ●●	●●  ●	●   ●	●   ●	●   ●	●   ●	●	  ●	●   ●	●   ●	●   ●	 ● ●	 ● ●	   ●
●●●●●	●●●●	●	●   ●	●●●●	●●●●	● ●●●	●●●●●	  ●	    ●	●●●	●	● ● ●	● ● ●	●   ●	●●●●	●   ●	●●●●	 ●●●	  ●	●   ●	 ● ●	● ● ●	  ●	  ●	  ●
●   ●	●   ●	●   ●	●   ●	●	●	●   ●	●   ●	  ●	●   ●	●  ●	●	●   ●	●  ●●	●   ●	●	●  ●●	● ●	    ●	  ●	●   ●	 ● ●	●● ●●	 ● ●	  ●	 ●
●   ●	●●●●	 ●●●	●●●●	●●●●●	●	 ●●●●	●   ●	 ●●●	 ●●●	●   ●	●●●●●	●   ●	●   ●	 ●●●	●	 ●●●●	●  ●●	●●●●	  ●	 ●●●	  ●	●   ●	●   ●	  ●	●●●●●	CR



●●●●		  ●	 ●●●	●●●●●		●   ●			  ●		   ●	●●●●●	  ●	 ●	 ●●●	●	 ●●●	 ●●●	  ●	 ●●●	 ●●●	 ●● 		    ●		●●●●●
    ●		 ●	●   ●	   ●	● ● ●	●   ●	  ●		  ●	  ●	  ●	●	  ●	  ●	●   ●	● ●	●	●   ●	 ●●	●   ●	●   ●	 ●●		   ●	●●●●●	●●●●●
  ●●	●●●●●		 ●●●	  ●	 ●●●	●●●●●			  ●		  ●	●●●●	●●●●●	  ●	  ●●	●●	●●●●	● ● ●	  ●	 ●●●●	  ●●	 ●● ●		  ●		●●●●●
    ●			●   ●	 ●	● ● ●	    ●	  ●	  ●		  ●	  ●	    ●	  ●	  ●	 ●	●	●   ●	●   ●	  ●	    ●		●  ●	  	 ●	●●●●●	●●●●●
●●●●			 ●●●	 ●		    ●	 ●	 ●	  ●		   ●	●●●●	  ●	 ●	●●●●●	●●●●●	 ●●●	 ●●●	 ●●●	 ●●●	  ●	 ●● ●	  ●	●		●●●●●


{let instr = '';
	rz(14,31,31,31,14, 0, 0,'●');
	rz(31,21,21,21,17, 0, 0,'E');
	rz(21,21,21,21,21, 0, 0,'≡');
	rz(30, 5, 5, 5,30, 0, 0,'A');
	rz( 0, 0, 0, 0, 0, 0, 0,' ');
	rz(18,21,21,21, 8, 0, 0,'S');
	rz( 0,17,31,17, 0, 0, 0,'I');
	rz(15,16,16,16,15, 0, 0,'U');
	rz(31,31,31,31,31,31,31,'⌂');
	rz(31,17,17,17,14, 0, 0,'D');
	rz(31, 5,13,21,18, 0, 0,'R');
	rz( 8,17,17,17,15, 0, 0,'J');
	rz(31, 2, 4, 8,31, 0, 0,'N');
	rz(31, 5, 5, 5, 1, 0, 0,'F');
	rz(14,17,17,17,10, 0, 0,'C');
	rz(31, 4, 4,10,17, 0, 0,'K');
	rz( 1, 1,31, 1, 1, 0, 0,'T');
	rz(17,25,21,19,17, 0, 0,'Z');
	rz(31,16,16,16,16, 0, 0,'L');
	rz(31, 8, 4, 8,31, 0, 0,'W');
	rz(31, 4, 4, 4,31, 0, 0,'H');
	rz( 3, 4,24, 4, 3, 0, 0,'Y');
	rz(31, 5, 5, 5, 2, 0, 0,'P');
	rz(14,17,17,25,30, 0, 0,'Q');
	rz(14,17,17,17,14, 0, 0,'O');
	rz(31,21,21,21,10, 0, 0,'B');
	rz(14,17,21,21,29, 0, 0,'G');
	rz( 8,12,14,12, 8, 0, 0,'▲');
	rz(31, 2, 4, 2,31, 0, 0,'M');
	rz(17,10, 4,10,17, 0, 0,'X');
	rz( 3,12,16,12, 3, 0, 0,'V');
	rz( 2, 6,14, 6, 2, 0, 0,'▼');
	rz(14,31,31,31,14, 0, 0,'●');
	rz(17,17,21,21,10, 0, 0,'3');
	rz(21,21,21,21,21, 0, 0,'≡');
	rz( 4, 4, 4, 4, 4, 0, 0,'-');
	rz( 0, 0, 0, 0, 0, 0, 0,' ');
	rz( 0, 2, 1, 0, 0, 0, 0,"'");
	rz(10,21,21,21,10, 0, 0,'8');
	rz( 1,25, 5, 3, 1, 0, 0,'7');
	rz(31,31,31,31,31,31,31,'⌂');
	rz(10, 4,14, 4,10, 0, 0,'*');
	rz( 7, 4, 4, 4,31, 0, 0,'4');
	rz( 0,16,10, 0, 0, 0, 0,';');
	rz( 0,16, 8, 0, 0, 0, 0,',');
	rz( 0, 0,23, 0, 0, 0, 0,'!');
	rz( 0, 0,10, 0, 0, 0, 0,':');
	rz( 0, 0,14,17, 0, 0, 0,'(');
	rz(23,21,21,21, 9, 0, 0,'5');
	rz( 4, 4,31, 4, 4, 0, 0,'+');
	rz( 0,17,14, 0, 0, 0, 0,')');
	rz(18,25,21,21,18, 0, 0,'2');
	rz(31,20,18,16,16, 0, 0,'Ł');
	rz(14,21,21,21, 8, 0, 0,'6');
	rz(14,25,21,19,14, 0, 0,'0');
	rz( 0,18,31,16, 0, 0, 0,'1');
	rz( 2,21,21,21,14, 0, 0,'9');
	rz( 2, 1,17, 5, 2, 0, 0,'?');
	rz( 8,23,23, 9,20, 0, 0,'&');
	rz( 8,12,14,12, 8, 0, 0,'▲');
	rz( 0, 0,16, 0, 0, 0, 0,'.');
	rz(16, 8, 4, 2, 1, 0, 0,'/');
	rz(10,10,10,10,10, 0, 0,'=');
	rz( 2, 6,14, 6, 2, 0, 0,'▼');

function rz(a,b,c,d,e,f,g,znak) {
 let	n = ((((((a*32+b)*32+c)*32+d)*32+e)*32+f)*32+g)*16;
 let	tpg= Math.floor(n / 0o10000000000),
	ar = (n >> 17) & 0o17777,
	nr = (n >>  4) & 0o17777,
	bm = (n >>  1) & 7,
	bz = n & 1;
 instr += '\t:' + (tpg+1024).toString(8).substr(1) +' '+ (ar+32768).toString(8).substr(1) +' '+ (nr+32768).toString(8).substr(1) +' '+ bm.toString(8) + bz + '\twzór ' + znak + '\n';
}
console.log(instr);
}

*/
